package com.ming_za.odupdaterserver.api;

import com.ming_za.odupdaterserver.core.service.update.res.UpdateRequest;
import com.ming_za.odupdaterserver.core.service.update.res.PreUpdate;

/**
 * 规定更新器监听功能，如果需创建新的监听，请实现该接口
 * <p>监听单个文件更新时整个生命周期</p>
 * <p>需调用更新请转到{@link ResourcesManager}</p>
 */
public interface UpdateListener {

    //获取更新文件

    /**
     * 更新前
     * <p>该函数之后将读取文件数据，变为预更新状态</p>
     * @param preUpdate 更新对象
     * @param ip 请求ip
     */
    default void beforeUpdate(PreUpdate preUpdate, String ip){}

    /**
     * 更新时，在{@link #beforeUpdate(PreUpdate, String)}之后，文件传输之前
     * @param res 更新的资源
     * @param ip 请求ip
     */
    default void onUpdate(UpdateRequest res, String ip){}

    /**
     * 更新后，传输完成时调用
     * @param res 更新的资源
     * @param ip 请求ip
     */
    default void afterUpdate(UpdateRequest res, String ip){};

    /**
     * 更新出错时调用
     * @param res 更新的资源
     * @param ip 请求ip
     * @param exception 更新异常
     */
    default void error(UpdateRequest res, String ip,Exception exception){};

}
